perm filename PARAMS.TMP[CM,DEK] blob
sn#786755 filedate 1985-02-25 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00010 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 % Computer Modern Roman 10 point
C00009 00003 % Computer Modern Bold Extended Roman 10 point
C00015 00004 % Computer Modern Typewriter Text for use with 10 point
C00021 00005 % Computer Modern Sans Serif Bold Extended 10 pt
C00027 00006 % Computer Modern Sans Serif Demibold Condensed 10 pt
C00033 00007 % Computer Modern Sans Serif Quotation Style Slanted 8 point
C00039 00008 % Computer Modern Bold Extended Roman 5 point
C00045 00009 % Computer Modern Text Italic 10 point
C00051 00010 % scraps of code that will eventually be a complete base file
C00065 ENDMK
C⊗;
% Computer Modern Roman 10 point
if unknown cmbase: input cmbase fi
fontidentifier:="CMR"; fontsize#:=10pt#;
u#:=20/36pt#; % unit width
width_adj#:=0pt#; % width adjustment for certain characters
serif_fit#:=0pt#; % extra sidebar near lowercase serifs
cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
letter_fit#:=0pt#; % extra space added to all sidebars
body_height#:=270/36pt#; % height of tallest characters
asc_height#:=250/36pt#; % height of lowercase ascenders
cap_height#:=246/36pt#; % height of caps
fig_height#:=232/36pt#; % height of numerals
x_height#:=155/36pt#; % height of lowercase without ascenders
math_axis#:=90/36pt#; % axis of symmetry for math symbols
bar_height#:=87/36pt#; % height of crossbar in lowercase e
comma_depth#:=70/36pt#; % depth of comma below baseline
desc_depth#:=70/36pt#; % depth of lowercase descenders
fine#:=7/36pt#; % diameter of extrafine details
crisp#:=0pt#; % diameter of serif corners
tiny#:=8/36pt#; % diameter of rounded corners
hair#:=9/36pt#; % lowercase hairline breadth
stem#:=25/36pt#; % lowercase stem breadth
curve#:=30/36pt#; % lowercase curve breadth
ess#:=27/36pt#; % breadth in middle of lowercase s
flare#:=33/36pt#; % diameter of bulbs or breadth of terminals
dotsize#:=38/36pt#; % diameter of dots
cap_hair#:=11/36pt#; % uppercase hairline breadth
cap_stem#:=32/36pt#; % uppercase stem breadth
cap_curve#:=37/36pt#; % uppercase curve breadth
cap_ess#:=35/36pt#; % breadth in middle of uppercase s
rule_thickness#:=.4pt#; % thickness of lines in math symbols
cup#:=1/36pt#; % amount erased at top or bottom of serifs
bracket#:=20/36pt#; % vertical distance from serif base to tangent
jut#:=32/36pt#; % protrusion of lowercase serifs
cap_jut#:=41/36pt#; % protrusion of uppercase serifs
beak_jut#:=10/36pt#; % horizontal protrusion of beak serifs
beak#:=70/36pt#; % vertical protrusion of beak serifs
vair#:=8/36pt#; % vertical diameter of hairlines
slab#:=11/36pt#; % serif and arm thickness
cap_bar#:=11/36pt#; % uppercase bar thickness
cap_band#:=11/36pt#; % uppercase thickness above/below lobes
serif_drop#:=4/36pt#; % vertical drop of sloped serifs
stem_corr#:=1/36pt#; % for small refinements of stem breadth
hair_corr#:=1/36pt#; % for small refinements of hairline breadth
apex_corr#:=0pt#; % extra width at diagonal junctions
o#:=8/36pt#; % amount of overshoot for curves
apex_o#:=12/36pt#; % amount of overshoot for diagonal junctions
slant:=0; % tilt ratio $(\Delta x/\Delta y)$
fudge:=1; % factor applied to weights of heavy characters
math_spread:=0; % extra openness of math symbols
superness:=1/sqrt2; % parameter for superellipses
superpull:=1/6; % extra openness inside bowls
beak_darkness:=11/30; % fraction of triangle inside beak serifs
ligs:=1; % level of ligatures to be included
square_dots:=false; % should dots be square?
notched:=false; % should diagonal junctions be notched?
serifs:=true; % should serifs and bulbs be attached?
monospace:=false; % should all characters have the same width?
variant_g:=false; % should an italic-style g be used?
low_asterisk:=false; % should the asterisk be centered at the axis?
math_fitting:=false; % should math-mode spacing be used?
generate roman % use the file roman.mf to generate a font
% Computer Modern Bold Extended Roman 10 point
if unknown cmbase: input cmbase fi
fontidentifier:="CMBX"; fontsize#:=10pt#;
u#:=23/36pt#; % unit width
width_adj#:=-11/36pt#; % width adjustment for certain characters
serif_fit#:=0pt#; % extra sidebar near lowercase serifs
cap_serif_fit#:=7/36pt#; % extra sidebar near uppercase serifs
letter_fit#:=0pt#; % extra space added to all sidebars
body_height#:=270/36pt#; % height of tallest characters
asc_height#:=250/36pt#; % height of lowercase ascenders
cap_height#:=247/36pt#; % height of caps
fig_height#:=232/36pt#; % height of numerals
x_height#:=160/36pt#; % height of lowercase without ascenders
math_axis#:=90/36pt#; % axis of symmetry for math symbols
bar_height#:=80/36pt#; % height of crossbar in lowercase e
comma_depth#:=70/36pt#; % depth of comma below baseline
desc_depth#:=70/36pt#; % depth of lowercase descenders
fine#:=10/36pt#; % diameter of extrafine details
crisp#:=0pt#; % diameter of serif corners
tiny#:=13/36pt#; % diameter of rounded corners
hair#:=17/36pt#; % lowercase hairline breadth
stem#:=41/36pt#; % lowercase stem breadth
curve#:=46/36pt#; % lowercase curve breadth
ess#:=38/36pt#; % breadth in middle of lowercase s
flare#:=45/36pt#; % diameter of bulbs or breadth of terminals
dotsize#:=56/36pt#; % diameter of dots
cap_hair#:=19/36pt#; % uppercase hairline breadth
cap_stem#:=51/36pt#; % uppercase stem breadth
cap_curve#:=55/36pt#; % uppercase curve breadth
cap_ess#:=53/36pt#; % breadth in middle of uppercase s
rule_thickness#:=.6pt#; % thickness of lines in math symbols
cup#:=2/36pt#; % amount erased at top or bottom of serifs
bracket#:=10/36pt#; % vertical distance from serif base to tangent
jut#:=32/36pt#; % protrusion of lowercase serifs
cap_jut#:=46/36pt#; % protrusion of uppercase serifs
beak_jut#:=11/36pt#; % horizontal protrusion of beak serifs
beak#:=70/36pt#; % vertical protrusion of beak serifs
vair#:=13/36pt#; % vertical diameter of hairlines
slab#:=17/36pt#; % serif and arm thickness
cap_bar#:=17/36pt#; % uppercase bar thickness
cap_band#:=17/36pt#; % uppercase thickness above/below lobes
serif_drop#:=3/36pt#; % vertical drop of sloped serifs
stem_corr#:=2/36pt#; % for small refinements of stem breadth
hair_corr#:=1.5/36pt#; % for small refinements of hairline breadth
apex_corr#:=0pt#; % extra width at diagonal junctions
o#:=6/36pt#; % amount of overshoot for curves
apex_o#:=9/36pt#; % amount of overshoot for diagonal junctions
slant:=0; % tilt ratio $(\Delta x/\Delta y)$
fudge:=1; % factor applied to weights of heavy characters
math_spread:=.5; % extra openness of math symbols
superness:=8/11; % parameter for superellipses
superpull:=1/8; % extra openness inside bowls
beak_darkness:=.4; % fraction of triangle inside beak serifs
ligs:=1; % level of ligatures to be included
square_dots:=false; % should dots be square?
notched:=false; % should diagonal junctions be notched?
serifs:=true; % should serifs and bulbs be attached?
monospace:=false; % should all characters have the same width?
variant_g:=false; % should an italic-style g be used?
low_asterisk:=false; % should the asterisk be centered at the axis?
math_fitting:=false; % should math-mode spacing be used?
generate roman % use the file roman.mf to generate a font
% Computer Modern Typewriter Text for use with 10 point
if unknown cmbase: input cmbase fi
fontidentifier:="CMTT"; fontsize#:=10pt#;
u#:=21/36pt#; % unit width
width_adj#:=0pt#; % width adjustment for certain characters
serif_fit#:=0pt#; % extra sidebar near lowercase serifs
cap_serif_fit#:=0pt#; % extra sidebar near uppercase serifs
letter_fit#:=0pt#; % extra space added to all sidebars
body_height#:=250/36pt#; % height of tallest characters
asc_height#:=220/36pt#; % height of lowercase ascenders
cap_height#:=220/36pt#; % height of caps
fig_height#:=220/36pt#; % height of numerals
x_height#:=155/36pt#; % height of lowercase without ascenders
math_axis#:=110/36pt#; % axis of symmetry for math symbols
bar_height#:=79/36pt#; % height of crossbar in lowercase e
comma_depth#:=40/36pt#; % depth of comma below baseline
desc_depth#:=80/36pt#; % depth of lowercase descenders
fine#:=21/36pt#; % diameter of extrafine details
crisp#:=22/36pt#; % diameter of serif corners
tiny#:=22/36pt#; % diameter of rounded corners
hair#:=25/36pt#; % lowercase hairline breadth
stem#:=25/36pt#; % lowercase stem breadth
curve#:=25/36pt#; % lowercase curve breadth
ess#:=22/36pt#; % breadth in middle of lowercase s
flare#:=32/36pt#; % diameter of bulbs or breadth of terminals
dotsize#:=36/36pt#; % diameter of dots
cap_hair#:=25/36pt#; % uppercase hairline breadth
cap_stem#:=25/36pt#; % uppercase stem breadth
cap_curve#:=25/36pt#; % uppercase curve breadth
cap_ess#:=25/36pt#; % breadth in middle of uppercase s
rule_thickness#:=25/36pt#; % thickness of lines in math symbols
cup#:=0pt#; % amount erased at top or bottom of serifs
bracket#:=0pt#; % vertical distance from serif base to tangent
jut#:=34/36pt#; % protrusion of lowercase serifs
cap_jut#:=34/36pt#; % protrusion of uppercase serifs
beak_jut#:=0pt#; % horizontal protrusion of beak serifs
beak#:=34/36pt#; % vertical protrusion of beak serifs
vair#:=22/36pt#; % vertical diameter of hairlines
slab#:=22/36pt#; % serif and arm thickness
cap_bar#:=22/36pt#; % uppercase bar thickness
cap_band#:=22/36pt#; % uppercase thickness above/below lobes
serif_drop#:=0pt#; % vertical drop of sloped serifs
stem_corr#:=0pt#; % for small refinements of stem breadth
hair_corr#:=0pt#; % for small refinements of hairline breadth
apex_corr#:=10/36pt#; % extra width at diagonal junctions
o#:=4/36pt#; % amount of overshoot for curves
apex_o#:=6/36pt#; % amount of overshoot for diagonal junctions
slant:=0; % tilt ratio $(\Delta x/\Delta y)$
fudge:=0.8; % factor applied to weights of heavy characters
math_spread:=-1; % extra openness of math symbols
superness:=1/sqrt2; % parameter for superellipses
superpull:=0; % extra openness inside bowls
beak_darkness:=0; % fraction of triangle inside beak serifs
ligs:=0; % level of ligatures to be included
square_dots:=false; % should dots be square?
notched:=true; % should diagonal junctions be notched?
serifs:=true; % should serifs and bulbs be attached?
monospace:=true; % should all characters have the same width?
variant_g:=false; % should an italic-style g be used?
low_asterisk:=true; % should the asterisk be centered at the axis?
math_fitting:=false; % should math-mode spacing be used?
generate roman % use the file roman.mf to generate a font
% Computer Modern Sans Serif Bold Extended 10 pt
if unknown cmbase: input cmbase fi
fontidentifier:="CMSSBX"; fontsize#:=10pt#;
u#:=22/36pt#; % unit width
width_adj#:=-22/36pt#; % width adjustment for certain characters
serif_fit#:=-9/36pt#; % extra sidebar near lowercase serifs
cap_serif_fit#:=-11/36pt#; % extra sidebar near uppercase serifs
letter_fit#:=0pt#; % extra space added to all sidebars
body_height#:=270/36pt#; % height of tallest characters
asc_height#:=250/36pt#; % height of lowercase ascenders
cap_height#:=250/36pt#; % height of caps
fig_height#:=250/36pt#; % height of numerals
x_height#:=165/36pt#; % height of lowercase without ascenders
math_axis#:=95/36pt#; % axis of symmetry for math symbols
bar_height#:=95/36pt#; % height of crossbar in lowercase e
comma_depth#:=38/36pt#; % depth of comma below baseline
desc_depth#:=60/36pt#; % depth of lowercase descenders
fine#:=9/36pt#; % diameter of extrafine details
crisp#:=20/36pt#; % diameter of serif corners
tiny#:=26/36pt#; % diameter of rounded corners
hair#:=49/36pt#; % lowercase hairline breadth
stem#:=49/36pt#; % lowercase stem breadth
curve#:=49/36pt#; % lowercase curve breadth
ess#:=45/36pt#; % breadth in middle of lowercase s
flare#:=40/36pt#; % diameter of bulbs or breadth of terminals
dotsize#:=47/36pt#; % diameter of dots
cap_hair#:=49/36pt#; % uppercase hairline breadth
cap_stem#:=53/36pt#; % uppercase stem breadth
cap_curve#:=53/36pt#; % uppercase curve breadth
cap_ess#:=51/36pt#; % breadth in middle of uppercase s
rule_thickness#:=30/36pt#; % thickness of lines in math symbols
cup#:=0pt#; % amount erased at top or bottom of serifs
bracket#:=0pt#; % vertical distance from serif base to tangent
jut#:=0pt#; % protrusion of lowercase serifs
cap_jut#:=0pt#; % protrusion of uppercase serifs
beak_jut#:=0pt#; % horizontal protrusion of beak serifs
beak#:=1.5/36pt#; % vertical protrusion of beak serifs
vair#:=26/36pt#; % vertical diameter of hairlines
slab#:=36/36pt#; % serif and arm thickness
cap_bar#:=34/36pt#; % uppercase bar thickness
cap_band#:=31/36pt#; % uppercase thickness above/below lobes
serif_drop#:=2/36pt#; % vertical drop of sloped serifs
stem_corr#:=1/36pt#; % for small refinements of stem breadth
hair_corr#:=2/36pt#; % for small refinements of hairline breadth
apex_corr#:=18/36pt#; % extra width at diagonal junctions
o#:=8/36pt#; % amount of overshoot for curves
apex_o#:=0pt#; % amount of overshoot for diagonal junctions
slant:=0; % tilt ratio $(\Delta x/\Delta y)$
fudge:=.88; % factor applied to weights of heavy characters
math_spread:=.5; % extra openness of math symbols
superness:=3/4; % parameter for superellipses
superpull:=1/18; % extra openness inside bowls
beak_darkness:=0; % fraction of triangle inside beak serifs
ligs:=1; % level of ligatures to be included
square_dots:=true; % should dots be square?
notched:=true; % should diagonal junctions be notched?
serifs:=false; % should serifs and bulbs be attached?
monospace:=false; % should all characters have the same width?
variant_g:=false; % should an italic-style g be used?
low_asterisk:=false; % should the asterisk be centered at the axis?
math_fitting:=false; % should math-mode spacing be used?
generate roman % use the file roman.mf to generate a font
% Computer Modern Sans Serif Demibold Condensed 10 pt
if unknown cmbase: input cmbase fi
fontidentifier:="CMSSDC"; fontsize#:=10pt#;
u#:=19/36pt#; % unit width
width_adj#:=-15/36pt#; % width adjustment for certain characters
serif_fit#:=-8/36pt#; % extra sidebar near lowercase serifs
cap_serif_fit#:=-9/36pt#; % extra sidebar near uppercase serifs
letter_fit#:=0pt#; % extra space added to all sidebars
body_height#:=270/36pt#; % height of tallest characters
asc_height#:=250/36pt#; % height of lowercase ascenders
cap_height#:=250/36pt#; % height of caps
fig_height#:=250/36pt#; % height of numerals
x_height#:=170/36pt#; % height of lowercase without ascenders
math_axis#:=95/36pt#; % axis of symmetry for math symbols
bar_height#:=95/36pt#; % height of crossbar in lowercase e
comma_depth#:=30/36pt#; % depth of comma below baseline
desc_depth#:=60/36pt#; % depth of lowercase descenders
fine#:=8/36pt#; % diameter of extrafine details
crisp#:=17/36pt#; % diameter of serif corners
tiny#:=23/36pt#; % diameter of rounded corners
hair#:=40/36pt#; % lowercase hairline breadth
stem#:=40/36pt#; % lowercase stem breadth
curve#:=40/36pt#; % lowercase curve breadth
ess#:=37/36pt#; % breadth in middle of lowercase s
flare#:=31/36pt#; % diameter of bulbs or breadth of terminals
dotsize#:=38/36pt#; % diameter of dots
cap_hair#:=40/36pt#; % uppercase hairline breadth
cap_stem#:=44/36pt#; % uppercase stem breadth
cap_curve#:=44/36pt#; % uppercase curve breadth
cap_ess#:=42/36pt#; % breadth in middle of uppercase s
rule_thickness#:=25/36pt#; % thickness of lines in math symbols
cup#:=0pt#; % amount erased at top or bottom of serifs
bracket#:=0pt#; % vertical distance from serif base to tangent
jut#:=0pt#; % protrusion of lowercase serifs
cap_jut#:=0pt#; % protrusion of uppercase serifs
beak_jut#:=0pt#; % horizontal protrusion of beak serifs
beak#:=1.5/36pt#; % vertical protrusion of beak serifs
vair#:=23/36pt#; % vertical diameter of hairlines
slab#:=31/36pt#; % serif and arm thickness
cap_bar#:=29/36pt#; % uppercase bar thickness
cap_band#:=27/36pt#; % uppercase thickness above/below lobes
serif_drop#:=2/36pt#; % vertical drop of sloped serifs
stem_corr#:=1/36pt#; % for small refinements of stem breadth
hair_corr#:=2/36pt#; % for small refinements of hairline breadth
apex_corr#:=14/36pt#; % extra width at diagonal junctions
o#:=7/36pt#; % amount of overshoot for curves
apex_o#:=0pt#; % amount of overshoot for diagonal junctions
slant:=0; % tilt ratio $(\Delta x/\Delta y)$
fudge:=.91; % factor applied to weights of heavy characters
math_spread:=.3; % extra openness of math symbols
superness:=3/4; % parameter for superellipses
superpull:=1/18; % extra openness inside bowls
beak_darkness:=0; % fraction of triangle inside beak serifs
ligs:=1; % level of ligatures to be included
square_dots:=true; % should dots be square?
notched:=true; % should diagonal junctions be notched?
serifs:=false; % should serifs and bulbs be attached?
monospace:=false; % should all characters have the same width?
variant_g:=true; % should an italic-style g be used?
low_asterisk:=false; % should the asterisk be centered at the axis?
math_fitting:=false; % should math-mode spacing be used?
generate roman % use the file roman.mf to generate a font
% Computer Modern Sans Serif Quotation Style Slanted 8 point
if unknown cmbase: input cmbase fi
fontidentifier:="CMSSQI"; fontsize#:=8pt#;
u#:=20/36pt#; % unit width
width_adj#:=-2/36pt#; % width adjustment for certain characters
serif_fit#:=-10/36pt#; % extra sidebar near lowercase serifs
cap_serif_fit#:=-14/36pt#; % extra sidebar near uppercase serifs
letter_fit#:=0pt#; % extra space added to all sidebars
body_height#:=220/36pt#; % height of tallest characters
asc_height#:=200/36pt#; % height of lowercase ascenders
cap_height#:=197/36pt#; % height of caps
fig_height#:=190/36pt#; % height of numerals
x_height#:=150/36pt#; % height of lowercase without ascenders
math_axis#:=80/36pt#; % axis of symmetry for math symbols
bar_height#:=74/36pt#; % height of crossbar in lowercase e
comma_depth#:=40/36pt#; % depth of comma below baseline
desc_depth#:=40/36pt#; % depth of lowercase descenders
fine#:=8/36pt#; % diameter of extrafine details
crisp#:=13/36pt#; % diameter of serif corners
tiny#:=18/36pt#; % diameter of rounded corners
hair#:=23/36pt#; % lowercase hairline breadth
stem#:=23/36pt#; % lowercase stem breadth
curve#:=23/36pt#; % lowercase curve breadth
ess#:=19/36pt#; % breadth in middle of lowercase s
flare#:=21/36pt#; % diameter of bulbs or breadth of terminals
dotsize#:=28/36pt#; % diameter of dots
cap_hair#:=23/36pt#; % uppercase hairline breadth
cap_stem#:=27/36pt#; % uppercase stem breadth
cap_curve#:=27/36pt#; % uppercase curve breadth
cap_ess#:=27/36pt#; % breadth in middle of uppercase s
rule_thickness#:=20/36pt#; % thickness of lines in math symbols
cup#:=0pt#; % amount erased at top or bottom of serifs
bracket#:=0pt#; % vertical distance from serif base to tangent
jut#:=0pt#; % protrusion of lowercase serifs
cap_jut#:=0pt#; % protrusion of uppercase serifs
beak_jut#:=0pt#; % horizontal protrusion of beak serifs
beak#:=0pt#; % vertical protrusion of beak serifs
vair#:=18/36pt#; % vertical diameter of hairlines
slab#:=19/36pt#; % serif and arm thickness
cap_bar#:=19/36pt#; % uppercase bar thickness
cap_band#:=19/36pt#; % uppercase thickness above/below lobes
serif_drop#:=0pt#; % vertical drop of sloped serifs
stem_corr#:=.5/36pt#; % for small refinements of stem breadth
hair_corr#:=.5/36pt#; % for small refinements of hairline breadth
apex_corr#:=4/36pt#; % extra width at diagonal junctions
o#:=6/36pt#; % amount of overshoot for curves
apex_o#:=2/36pt#; % amount of overshoot for diagonal junctions
slant:=2/7; % tilt ratio $(\Delta x/\Delta y)$
fudge:=.95; % factor applied to weights of heavy characters
math_spread:=0; % extra openness of math symbols
superness:=1/sqrt2; % parameter for superellipses
superpull:=1/10; % extra openness inside bowls
beak_darkness:=0; % fraction of triangle inside beak serifs
ligs:=1; % level of ligatures to be included
square_dots:=true; % should dots be square?
notched:=true; % should diagonal junctions be notched?
serifs:=false; % should serifs and bulbs be attached?
monospace:=false; % should all characters have the same width?
variant_g:=true; % should an italic-style g be used?
low_asterisk:=false; % should the asterisk be centered at the axis?
math_fitting:=false; % should math-mode spacing be used?
generate roman % use the file roman.mf to generate a font
% Computer Modern Bold Extended Roman 5 point
if unknown cmbase: input cmbase fi
fontidentifier:="CMBX"; fontsize#:=5pt#;
u#:=14.5/36pt#; % unit width
width_adj#:=-7/36pt#; % width adjustment for certain characters
serif_fit#:=-75/36pt#; % extra sidebar near lowercase serifs
cap_serif_fit#:=3/36pt#; % extra sidebar near uppercase serifs
letter_fit#:=11/36pt#; % extra space added to all sidebars
body_height#:=135/36pt#; % height of tallest characters
asc_height#:=125/36pt#; % height of lowercase ascenders
cap_height#:=123.5/36pt#; % height of caps
fig_height#:=116/36pt#; % height of numerals
x_height#:=80/36pt#; % height of lowercase without ascenders
math_axis#:=45/36pt#; % axis of symmetry for math symbols
bar_height#:=40/36pt#; % height of crossbar in lowercase e
comma_depth#:=35/36pt#; % depth of comma below baseline
desc_depth#:=35/36pt#; % depth of lowercase descenders
fine#:=8/36pt#; % diameter of extrafine details
crisp#:=0pt#; % diameter of serif corners
tiny#:=9/36pt#; % diameter of rounded corners
hair#:=14/36pt#; % lowercase hairline breadth
stem#:=22/36pt#; % lowercase stem breadth
curve#:=25/36pt#; % lowercase curve breadth
ess#:=19/36pt#; % breadth in middle of lowercase s
flare#:=26/36pt#; % diameter of bulbs or breadth of terminals
dotsize#:=31/36pt#; % diameter of dots
cap_hair#:=16/36pt#; % uppercase hairline breadth
cap_stem#:=28/36pt#; % uppercase stem breadth
cap_curve#:=31/36pt#; % uppercase curve breadth
cap_ess#:=29/36pt#; % breadth in middle of uppercase s
rule_thickness#:=.43pt#; % thickness of lines in math symbols
cup#:=1.5/36pt#; % amount erased at top or bottom of serifs
bracket#:=5/36pt#; % vertical distance from serif base to tangent
jut#:=17/36pt#; % protrusion of lowercase serifs
cap_jut#:=23/36pt#; % protrusion of uppercase serifs
beak_jut#:=7pt#; % horizontal protrusion of beak serifs
beak#:=35/36pt#; % vertical protrusion of beak serifs
vair#:=9/36pt#; % vertical diameter of hairlines
slab#:=12/36pt#; % serif and arm thickness
cap_bar#:=12/36pt#; % uppercase bar thickness
cap_band#:=12/36pt#; % uppercase thickness above/below lobes
serif_drop#:=1.5/36pt#; % vertical drop of sloped serifs
stem_corr#:=1.5/36pt#; % for small refinements of stem breadth
hair_corr#:=1/36pt#; % for small refinements of hairline breadth
apex_corr#:=0pt#; % extra width at diagonal junctions
o#:=3/36pt#; % amount of overshoot for curves
apex_o#:=4.5/36pt#; % amount of overshoot for diagonal junctions
slant:=0; % tilt ratio $(\Delta x/\Delta y)$
fudge:=1; % factor applied to weights of heavy characters
math_spread:=1.5; % extra openness of math symbols
superness:=8/11; % parameter for superellipses
superpull:=1/8; % extra openness inside bowls
beak_darkness:=.4; % fraction of triangle inside beak serifs
ligs:=1; % level of ligatures to be included
square_dots:=false; % should dots be square?
notched:=false; % should diagonal junctions be notched?
serifs:=true; % should serifs and bulbs be attached?
monospace:=false; % should all characters have the same width?
variant_g:=false; % should an italic-style g be used?
low_asterisk:=false; % should the asterisk be centered at the axis?
math_fitting:=false; % should math-mode spacing be used?
generate roman % use the file roman.mf to generate a font
% Computer Modern Text Italic 10 point
if unknown cmbase: input cmbase fi
fontidentifier:="CMTI"; fontsize#:=10pt#;
u#:=18.4/36pt#; % unit width
width_adj#:=0pt#; % width adjustment for certain characters
serif_fit#:=0pt#; % extra sidebar near lowercase serifs
cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
letter_fit#:=9/36pt#; % extra space added to all sidebars
body_height#:=270/36pt#; % height of tallest characters
asc_height#:=250/36pt#; % height of lowercase ascenders
cap_height#:=246/36pt#; % height of caps
fig_height#:=232/36pt#; % height of numerals
x_height#:=155/36pt#; % height of lowercase without ascenders
math_axis#:=90/36pt#; % axis of symmetry for math symbols
bar_height#:=87/36pt#; % height of crossbar in lowercase e
comma_depth#:=70/36pt#; % depth of comma below baseline
desc_depth#:=70/36pt#; % depth of lowercase descenders
fine#:=7/36pt#; % diameter of extrafine details
crisp#:=8/36pt#; % diameter of serif corners
tiny#:=8/36pt#; % diameter of rounded corners
hair#:=11/36pt#; % lowercase hairline breadth
stem#:=23/36pt#; % lowercase stem breadth
curve#:=28/36pt#; % lowercase curve breadth
ess#:=27/36pt#; % breadth in middle of lowercase s
flare#:=31/36pt#; % diameter of bulbs or breadth of terminals
dotsize#:=38/36pt#; % diameter of dots
cap_hair#:=11/36pt#; % uppercase hairline breadth
cap_stem#:=29/36pt#; % uppercase stem breadth
cap_curve#:=34/36pt#; % uppercase curve breadth
cap_ess#:=31/36pt#; % breadth in middle of uppercase s
rule_thickness#:=.4pt#; % thickness of lines in math symbols
cup#:=1/36pt#; % amount erased at top or bottom of serifs
bracket#:=20/36pt#; % vertical distance from serif base to tangent
jut#:=26/36pt#; % protrusion of lowercase serifs
cap_jut#:=34/36pt#; % protrusion of uppercase serifs
beak_jut#:=9pt#; % horizontal protrusion of beak serifs
beak#:=70/36pt#; % vertical protrusion of beak serifs
vair#:=8/36pt#; % vertical diameter of hairlines
slab#:=11/36pt#; % serif and arm thickness
cap_bar#:=11/36pt#; % uppercase bar thickness
cap_band#:=11/36pt#; % uppercase thickness above/below lobes
serif_drop#:=4/36pt#; % vertical drop of sloped serifs
stem_corr#:=1/36pt#; % for small refinements of stem breadth
hair_corr#:=1/36pt#; % for small refinements of hairline breadth
apex_corr#:=0pt#; % extra width at diagonal junctions
o#:=8/36pt#; % amount of overshoot for curves
apex_o#:=12/36pt#; % amount of overshoot for diagonal junctions
slant:=.25; % tilt ratio $(\Delta x/\Delta y)$
fudge:=1; % factor applied to weights of heavy characters
math_spread:=0; % extra openness of math symbols
superness:=1/sqrt2; % parameter for superellipses
superpull:=1/6; % extra openness inside bowls
beak_darkness:=11/30; % fraction of triangle inside beak serifs
ligs:=1; % level of ligatures to be included
square_dots:=false; % should dots be square?
notched:=false; % should diagonal junctions be notched?
serifs:=true; % should serifs and bulbs be attached?
monospace:=false; % should all characters have the same width?
variant_g:=true; % should an italic-style g be used?
low_asterisk:=false; % should the asterisk be centered at the axis?
math_fitting:=false; % should math-mode spacing be used?
generate italic % use the file italic.mf to generate a font
% scraps of code that will eventually be a complete base file
cmbase:=1; % when cmbase is known, this file has been input
let cmchar=\; % cmchar should precede each character, for testing purposes
let generate=input; % `generate' should follow the parameters
boolean square_dots,notched,serifs,
monospace,variant_g,low_asterisk,math_fitting;
newinternal slant,fudge,math_spread,superness,superpull,beak_darkness,ligs;
vardef serif@#(suffix $,$$)(expr darkness,jut) suffix modifier =
% serif at |z$| for stroke from |z$$|
pickup crisp_pen; numeric bracket_height; pair downward;
bracket_height=if str modifier="dark": 1.5 fi bracket;
% modifier might also be "sloped", but that code isn't written yet
% well, actually, I guess sloped_serif should be a separate routine
if y$<y$$: y@#2=min(y$+bracket_height,y$$);
top y@#1-slab=bot y@#0=y$+pen_bot_[tiny_pen]; downward=z$-z$$;
if y@#1>y@#2: y@#2:=y@#1; fi
else: y@#2=max(y$-bracket_height,y$$);
bot y@#1+slab=top y@#0=y$+pen_top_[tiny_pen]; downward=z$$-z$;
if y@#1<y@#2: y@#2:=y@#1; fi fi
if jut<0: z@#2+penoffset downward of currentpen =
z$l+penoffset downward of pen_[tiny_pen]+whatever*downward;
z@#3=z@#2+(epsilon,0);
else: z@#2-penoffset downward of currentpen =
z$r-penoffset downward of pen_[tiny_pen]+whatever*downward;
z@#3=z@#2-(epsilon,0); fi
filldraw z@#2{z$-z$$}
...darkness[z@#1-(jut,0),.5[z@#1,z@#2] ]{z@#1-z@#2}
...{jut,0}z@#1--z@#0--(x$,y@#0)--z@#3--cycle; % the serif
labels (@#1,@#2); enddef;
def cup_serif(suffix @,@@,$,$$)
(expr left_darkness,left_jut,right_darkness,right_jut)
suffix modifier =
serif$(@,@@,left_darkness,left_jut) modifier;
serif$$(@,@@,right_darkness,right_jut) modifier;
if cup>0: pickup tiny_pen; numeric cup_out,cup_in;
if y@<y@@: cup_out=bot y@; cup_in=cup_out+cup;
else: cup_out=top y@; cup_in=cup_out-cup; fi
erase fill (x$1,cup_out)..(x@,cup_in)..(x$$1,cup_out)--cycle;
fi enddef;
vardef arm@#(suffix $,$$)(expr darkness,jut) =
% arm from |z$| to |z$$|
x@#0=good.x(x$$r-jut); y@#0=y$r;
if serifs: y@#1=y$l; z@#1=z$$l+whatever*(z$$r-z@#0);
z@#1=.5[z$l,z@#1];
filldraw z$$l{z@#1-z$$l}
...darkness[z@#1,.5[z@#2,z$$l] ]...z@#2
---z$l--z$r--z@#0--z$$r--cycle; % arm and beak
else: filldraw z$l--z$r--z@#0--z$$r--cycle; fi % sans-serif arm
penlabels(@#0,@#1,@#2); enddef;
vardef diag_end(suffix from,$,$$,to) =
pickup tiny_pen; save from_x,to_x,y_;
if y.from>y$: bot else: top fi y_=y$;
(from_x,y_)=whatever[z.from,z$]; (to_x,y_)=whatever[z$$,z.to];
(from_x,y_){z$-z.from}
...z$+length(z$-(from_x,y_))*unitvector(z$$-z$){z$$-z$}
--z$$-length(z$$-(to_x,y_))*unitvector(z$$-z$){z$$-z$}
...{z.to-z$$}(to_x,y_) enddef;
def diag_inside(suffix $,$$) =
theta_:=angle(z$r-z$l);
penpos$'(whatever,theta_);
z$'=(0,pen_top) rotated theta_ + whatever[z$l,z$r];
theta_:=angle(z$-z$$)-90;
z$'l=(pen_lft,0) rotated theta_ + whatever[z$l,z$$l];
z$'r=(pen_rt,0) rotated theta_ + whatever[z$r,z$$r];
enddef;
def normal_adjust_fit(expr left_adjustment,right_adjustment) =
interim xoffset:=l:=-round(left_adjustment*hppp)-letter_fit;
% double rounding makes letter spacing more consistent
charwd:=charwd+2letter_fit#+left_adjustment+right_adjustment;
r:=l+round(charwd*hppp);
w:=r-round(right_adjustment*hppp)-letter_fit;
enddef;
def mono_adjust_fit(expr left_adjustment,right_adjustment) =
numeric expansion_factor;
mono_charwd#=2letter_fit#
+expansion_factor*(charwd+left_adjustment+right_adjustment);
forsuffixes $=u,jut,cap_jut,beak_jut: $:=$.#*expansion_factor*hppp; endfor
interim xoffset:=l:=
-round(left_adjustment*expansion_factor*hppp)-letter_fit;
r:=l+mono_charwd;
w:=r-round(right_adjustment*expansion_factor*hppp)-letter_fit;
charwd:=mono_charwd#; charic:=mono_charic#;
enddef;
extra_endchar:=extra_endchar&"w:=r-l";
def ignore_math_fit(expr left_adjustment,right_adjustment) = enddef;
def do_math_fit(expr left_adjustment,right_adjustment) =
l:=l-round(left_adjustment*hppp);
charwd:=charwd+left_adjustment+right_adjustment;
r:=l+round(charwd);
charic:=charic-right_adjustment enddef;
% someday I may also try to detect errors, such as:
% serifs should imply slab=band
% cap_stem-2stem_corr≥tiny, vair≥tiny, etc
% but it's probably better to make the code more bulletproof
def font_setup = designsize:=fontsize#;
define_pixels(u,width_corr,serif_fit,cap_serif_fit,
bar_height,cup,bracket,serif_drop,stem_corr,hair_corr,apex_corr);
define_blacker_pixels(ess,cap_ess,jut,cap_jut,beak_jut,beak);
define_whole_pixels(letter_fit,fine,crisp,tiny);
define_whole_vertical_pixels(body_height,asc_height,
cap_height,fig_height,x_height,comma_depth,desc_depth);
define_whole_blacker_pixels(hair,vair,slab,stem,curve,
flare,dotsize,cap_hair,cap_bar,cap_band,cap_stem,cap_curve);
define_corrected_pixels(o,apex_o);
rule_thickness:=ceiling(rule_thickness#*hppp);
math_axis:=.5vround(2math_axis#*hppp);
oo:=round(.5o#*hppp*o_correction)+epsilon;
if known Xerox_world: font_family fontidentifier; fi
if monospace: let adjust_fit=mono_adjust_fit;
mono_charic#:=body_height#*slant;
if mono_charic#<0: mono_charic#:=0; fi
mono_charwd#:=9u#+2letter_fit#; define_whole_pixels(mono_charwd);
else: let adjust_fit=normal_adjust_fit; fi
if math_fitting: let math_fit=do_math_fit
else: let math_fit=ignore_math_fit fi;
% maybe I'll compute some fudged widths too, and include in lowres corrections
lowres_fix(stem,curve,flare) 1.25;
lowres_fix(stem,curve) 1.1;
lowres_fix(cap_stem,cap_curve) 1.1;
lowres_fix(hair,cap_hair) 1.1;
lowres_fix(cap_band,cap_bar,slab) 1.1;
fine_breadth:=fine;
pickup if fine=0: nullpen
else: pencircle scaled fine; fine:=fine-3epsilon fi;
fine_pen:=savepen;
crisp_breadth:=crisp;
pickup if crisp=0: nullpen
else: pencircle scaled crisp; crisp:=crisp-3epsilon fi;
crisp_pen:=savepen;
tiny_breadth:=tiny;
pickup if tiny=0: nullpen
else: pencircle scaled tiny; tiny:=tiny-3epsilon fi;
tiny_pen:=savepen;
currenttransform:=identity slanted slant yscaled aspect_ratio;
body_depth:=desc_depth+body_height-asc_height;
enddef;
% this for efficiency only; worth it? (I guess it goes into PLAIN someday)
vardef penpos@#(expr b,d) =
(x@#r-x@#l,y@#r-y@#l)=(b,0) rotated d;
x@#=.5(x@#l+x@#r); y@#=.5(y@#l+y@#r) enddef;
def makebox(text rule) =
for y=0,asc_height,body_height,x_height,bar_height,-desc_depth,-body_depth:
rule(↑(l,y),↑(r,y)); endfor % horizontals
for x=l,r: rule(↑(x,-body_depth),↑(x,body_height)); endfor % verticals
for x=u*(1+floor(l/u)) step u until r-1:
rule(↑(x,-body_depth),↑(x,body_height)); endfor % more verticals
if charic≠0: rule((r+charic*pt,h!),(r+charic*pt,.5h!)); fi % italic correction
enddef;
def maketicks(text rule) =
for y=0,h!,-d!: rule((l,y),(l+10,y)); rule((r-10,y),(r,y)); endfor % horizontals
for x=l,r: rule((x,10-d!),(x,-d!)); rule((x,h!-10),(x,h!)); endfor % verticals
enddef;
rulepen:=pensquare;
vardef stroke text t =
forsuffixes e = l,r: path_.e:=t; endfor
path_.l -- reverse path_.r -- cycle enddef;
vardef super_arc.r(suffix $,$$) = % outside of super-ellipse
pair center,corner;
if y$=y$r: center=(x$$r,y$r); corner=(x$r,y$$r);
else: center=(x$r,y$$r); corner=(x$$r,y$r); fi
z$.r{corner-z$.r}...superness[center,corner]{z$$.r-z$.r}
...{z$$.r-corner}z$$.r enddef;
vardef super_arc.l(suffix $,$$) = % inside of super-ellipse
pair center,corner;
if y$=y$r: center=(x$$l,y$l); corner=(x$l,y$$l);
else: center=(x$l,y$$l); corner=(x$$l,y$l); fi
z$l{corner-z$l}...superness[center,corner]{z$$l-z$l}
...{z$$l-corner}z$$l enddef;
vardef pulled_super_arc.r(suffix $,$$)(expr superpull) =
pair center,corner;
if y$=y$r: center=(x$$r,y$r); corner=(x$r,y$$r);
else: center=(x$r,y$$r); corner=(x$$r,y$r); fi
z$r{corner-z$r}...superness[center,corner]{z$$r-z$r}
...{z$$r-corner}z$$r enddef;
vardef pulled_super_arc.l(suffix $,$$)(expr superpull) =
pair center,corner,outer_point;
if y$=y$r: center=(x$$l,y$l); corner=(x$l,y$$l);
outer_point=superness[(x$$r,y$r),(x$r,y$$r)];
else: center=(x$l,y$$l); corner=(x$$l,y$l);
outer_point=superness[(x$r,y$$r),(x$$r,y$r)]; fi
z$l{corner-z$l}
...superpull[superness[center,corner],outer_point]{z$$l-z$l}
...{z$$l-corner}z$$l enddef;
let {{=begingroup; let }}=endgroup;
vardef halfic# = .5charic enddef;